Update Tkinter Label from variable

您所在的位置:网站首页 tkinter update _idletask Update Tkinter Label from variable

Update Tkinter Label from variable

2023-03-23 22:06| 来源: 网络整理| 查看: 265

Answer a question

I wrote a Python script that does some task to generate, and then keep changing some text stored as a string variable. This works, and I can print the string each time it gets changed.

I can get the Label to display the string for the first time, but it never updates.

Here's my code:

from tkinter import * outputText = 'Ready' counter = int(0) root = Tk() root.maxsize(400, 400) var = StringVar() l = Label(root, textvariable=var, anchor=NW, justify=LEFT, wraplength=398) l.pack() var.set(outputText) while True: counter = counter + 1 outputText = result outputText = result outputText = result if counter == 5: break root.mainloop()

The Label will show Ready, but won't update to change that to the strings as they're generated later.

After a fair bit of googling and looking through answers on this site, I thought the solution might be to use update_idletasks. I tried putting that in after each time the variable was changed, but it didn't help.

Answers

The window is only displayed once the mainloop is entered. So you won't see any changes you make in your while True block preceding the line root.mainloop().

GUI interfaces work by reacting to events while in the mainloop. Here's an example where the StringVar is also connected to an Entry widget. When you change the text in the Entry widget it automatically changes in the Label.

from tkinter import * root = Tk() var = StringVar() var.set('hello') l = Label(root, textvariable = var) l.pack() t = Entry(root, textvariable = var) t.pack() root.mainloop() # the window is now displayed

I like the following reference: tkinter 8.5 reference: a GUI for Python

Here is a working example of what you were trying to do:

from tkinter import * from time import sleep root = Tk() var = StringVar() var.set('hello') l = Label(root, textvariable = var) l.pack() for i in range(6): sleep(1) # Need this to slow the changes down var.set('goodbye' if i%2 else 'hello') root.update_idletasks()

root.update Enter event loop until all pending events have been processed by Tcl.



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3